import os
import sys
from colorama import init, Fore, Back, Style
init()
# hohos2 CLI tool version 2.6

# Version of the tool
VERSION = "2.6"

# Help message
HELP_MESSAGE = """
\033[0;1;31;91m▄\033[0;1;33;93m▄\033[0m    \033[0;1;36;96m▄\033[0;1;34;94m▄\033[0m    \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄\033[0m    \033[0;1;33;93m▄\033[0;1;32;92m▄\033[0m    \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m   \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m   \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▀▀\033[0;1;33;93m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m██\033[0;1;35;95m██\033[0;1;31;91m██\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m██\033[0;1;36;96m██\033[0;1;34;94m██\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█\033[0m    \033[0;1;32;92m█\033[0;1;36;96m█\033[0m   \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m   \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m   \033[0;1;36;96m██\033[0;1;34;94m▄▄\033[0;1;35;95m██\033[0m  
\033[0;1;31;91m▀\033[0;1;33;93m▀\033[0m    \033[0;1;36;96m▀\033[0;1;34;94m▀\033[0m    \033[0;1;31;91m▀\033[0;1;33;93m▀▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀\033[0m    \033[0;1;33;93m▀\033[0;1;32;92m▀\033[0m    \033[0;1;34;94m▀\033[0;1;35;95m▀▀\033[0;1;31;

\033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄▄\033[0m     \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄▄\033[0m       \033[0;1;35;95m▄\033[0;1;31;91m▄▄\033[0;1;33;93m▄\033[0m      \033[0;1;34;94m▄\033[0;1;35;95m▄▄\033[0;1;31;91m▄\033[0m               \033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m                \033[0;1;31;91m▄\033[0;1;33;93m▄▄\033[0;1;32;92m▄\033[0m   
\033[0;1;33;93m█\033[0;1;32;92m█▀\033[0;1;36;96m▀▀\033[0;1;34;94m██\033[0m   \033[0;1;31;91m█\033[0;1;33;93m█▀\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m    \033[0;1;31;91m██\033[0;1;33;93m▀▀\033[0;1;32;92m██\033[0m   \033[0;1;34;94m▄\033[0;1;35;95m█▀\033[0;1;31;91m▀▀\033[0;1;33;93m▀█\033[0m             \033[0;1;32;92m█\033[0;1;36;96m▀▀\033[0;1;34;94m▀▀\033[0;1;35;95m██\033[0;1;31;91m▄\033[0m             \033[0;1;33;93m██\033[0;1;32;92m▀▀\033[0;1;36;96m██\033[0m  
\033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m  \033[0;1;31;91m█\033[0;1;33;93m█\033[0m    \033[0;1;36;96m█\033[0;1;34;94m█\033[0m  \033[0;1;35;95m█\033[0;1;31;91m█▄\033[0m                       \033[0;1;31;91m█\033[0;1;33;93m█\033[0m            \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m 
\033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m  \033[0;1;33;93m█\033[0;1;32;92m█\033[0m    \033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m▀█\033[0;1;32;92m██\033[0;1;36;96m█▄\033[0m                 \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m             \033[0;1;32;92m█\033[0;1;36;96m█\033[0m \033[0;1;34;94m██\033[0m \033[0;1;35;95m█\033[0;1;31;91m█\033[0m 
\033[0;1;34;94m█\033[0;1;35;95m█\033[0m    \033[0;1;33;93m█\033[0;1;32;92m█\033[0m  \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m  \033[0;1;32;92m█\033[0;1;36;96m█\033[0m    \033[0;1;35;95m█\033[0;1;31;91m█\033[0m       \033[0;1;34;94m▀█\033[0;1;35;95m█\033[0m              \033[0;1;31;91m▄\033[0;1;33;93m█▀\033[0m               \033[0;1;36;96m█\033[0;1;34;94m█\033[0m    \033[0;1;31;91m█\033[0;1;33;93m█\033[0m 
\033[0;1;35;95m█\033[0;1;31;91m█▄\033[0;1;33;93m▄▄\033[0;1;32;92m██\033[0m   \033[0;1;34;94m█\033[0;1;35;95m█▄\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m    \033[0;1;34;94m██\033[0;1;35;95m▄▄\033[0;1;31;91m██\033[0m   \033[0;1;32;92m█\033[0;1;36;96m▄▄\033[0;1;34;94m▄▄\033[0;1;35;95m▄█\033[0;1;31;91m▀\033[0m            \033[0;1;31;91m▄\033[0;1;33;93m██\033[0;1;32;92m▄▄\033[0;1;36;96m▄▄\033[0;1;34;94m▄\033[0m     \033[0;1;33;93m██\033[0m      \033[0;1;35;95m██\033[0;1;31;91m▄▄\033[0;1;33;93m██\033[0m  
\033[0m

\033[1;34;40m[*]hoho_ddos2 hohos2 CLI tool
\033[1;32;40m[*]Hello, this is hoho_ddos2.0, which is a DDOS attack program attacked by network hackers, with multiple DDOS attack types and methods. And that DDOS method will be updated in the future.
\033[1;37;40m
 --------------------------------------
|        Project open source           |
|https://github.com/sansjtw/hoho_ddos2 |
|https://gitee.com/sansjtw/hoho_ddos2  |
|                                      |
|            Blog website              |
|http://dvrs3.osxo.cn/bb               |
|http://dvrss.ouuq.cn/f4               |
|                                      |
 --------------------------------------
 \033[1;31;40m[-]Please use it for illegal purposes.
 \033[1;37;40m
Usage: hohos2 [OPTIONS]

Options:
  -h, --help           Show help for the tool or parameter
  -v, --version        Show the version of hohos2 tool
  -la, --language      Set the language (en or cn). Default is en
  -t, --type           Set the attack type (required)
  -m, --method         Set the attack method (required)

Attack Types:
  Flood_attack = FLA
  Other_attack = OTA
  Protocol_specific_attack = PRSA
  Server_attack = SEA
  Slow_Attack = SLA
  ipv6_attack = IP6A

Example:
  hohos2 -la cn -t FLA -m HTTP_Flood
"""

# Type help message
TYPE_HELP_MESSAGE = """
Function:
  Set the attack type

Usage:
  -t <Attack type>

Options:
  Flood_attack
  Other_attack
  Protocol_specific_attack
  Server_attack
  Slow_Attack
  ipv6_attack

Option Shortcuts:
  Flood_attack = FLA
  Other_attack = OTA
  Protocol_specific_attack = PRSA
  Server_attack = SEA
  Slow_Attack = SLA
  ipv6_attack = IP6A
"""

# Method help messages
METHOD_HELP_MESSAGES = {
    "Flood_attack": """
Function:
  Set the attack method for type Flood_attack

Usage:
  -m <Attack method>

Options:
  ACK_Flood
  Advanced_DNS_Query_Flood
  Advanced_HTTP_Flooding
  Advanced_ICMP_Flooding
  Advanced_IP_Flooding
  Advanced_SYN_Flood
  Advanced_UDP_Reflection_Flood
  Connection_Flood
  DNS_Query_Flood
  HTTP_Flood
  HTTP_Flood_AMT
  ICMP_Flood
  IP_lood
  Ntp_Request_Flood
  SYN_Flood
  UDP_Flood_AMT
  UDP_Reflection_Flood
""",
    "Other_attack": """
Function:
  Set the attack method for type Other_attack

Usage:
  -m <Attack method>

Options:
  DNS_Amplification
  RUDY_Attack
  Replay_Attack
  Sip_Register_Flood
  Sip_lnvite_Flood
  Smurf_attack
""",
    "Protocol_specific_attack": """
Function:
  Set the attack method for type Protocol_specific_attack

Usage:
  -m <Attack method>

Options:
  Minecraft_Protocol_Attacks
  SSDP_attack
""",
    "Server_attack": """
Function:
  Set the attack method for type Server_attack

Usage:
  -m <Attack method>

Options:
  Cache_Server_Attack
  Minecraft_server_DDoS
  translation_server_ddos
""",
    "Slow_Attack": """
Function:
  Set the attack method for type Slow_Attack

Usage:
  -m <Attack method>

Options:
  Slow_DNS_attack
  Slow_GET_attack
  Slow_POST_attack
  Slow_Read_attack
  Slow_SSL_attack
  Slowloris_attack
  slow_write_attack
""",
    "ipv6_attack": """
Function:
  Set the attack method for type ipv6_attack

Usage:
  -m <Attack method>

Options:
  ICMPv6_Flood
  IPv6_Flood_Attack
  IPv6_Fragmentation_Attack
  IPv6_ND
  IPv6_Replay_Attack
  IPv6_SLAAC_Flood
  Neighbor_Cache_Exhaustion
"""
}

def show_help():
    print(HELP_MESSAGE)

def show_version():
    print(f"hoho_ddos2 hohos2 version {VERSION}")

def show_type_help():
    print(TYPE_HELP_MESSAGE)

def show_method_help(attack_type):
    if attack_type in METHOD_HELP_MESSAGES:
        print(METHOD_HELP_MESSAGES[attack_type])
    else:
        print(f"Unknown type: {attack_type}")

def main():
    language = "en"
    attack_type = ""
    method = ""
    help_type = ""

    args = sys.argv[1:]
    i = 0
    while i < len(args):
        arg = args[i]
        if arg in ("-h", "--help"):
            help_type = "help"
            i += 1
        elif arg in ("-v", "--version"):
            show_version()
            return
        elif arg in ("-la", "--language"):
            if i + 1 < len(args):
                language = args[i + 1]
                i += 2
            else:
                print("Error: --language option requires a value")
                show_help()
                return
        elif arg in ("-t", "--type"):
            if i + 1 < len(args):
                if args[i + 1] == "-h":
                    show_type_help()
                    return
                else:
                    attack_type = {
                        "FLA": "Flood_attack",
                        "OTA": "Other_attack",
                        "PRSA": "Protocol_specific_attack",
                        "SEA": "Server_attack",
                        "SLA": "Slow_Attack",
                        "IP6A": "ipv6_attack"
                    }.get(args[i + 1], args[i + 1])
                    i += 2
            else:
                print("Error: --type option requires a value")
                show_help()
                return
        elif arg in ("-m", "--method"):
            if i + 1 < len(args):
                if args[i + 1] == "-h":
                    show_method_help(attack_type)
                    return
                else:
                    method = args[i + 1]
                    i += 2
            else:
                print("Error: --method option requires a value")
                show_help()
                return
        else:
            print(f"Unknown option: {arg}")
            show_help()
            return

    if help_type == "help":
        show_help()
        return

    if not attack_type or not method:
        print("Error: -t and -m options are required")
        show_help()
        return

    base_dir = "ddos_cn" if language == "cn" else "ddos"
    script_dir = os.path.dirname(os.path.realpath(__file__))
    script_path = os.path.join(script_dir, base_dir, attack_type, f"{method}.py")

    if not os.path.isfile(script_path):
        print(f"Error: The script {script_path} does not exist.")
        return

    with open(script_path) as script_file:
        script_content = script_file.read()

    print("Start running")
    exec(script_content)

if __name__ == "__main__":
    main()

# ©sansjtw https://gitee.com/sansjtw/
# https://sansjtw.netlify.app/
# hoho_ddos2 hohos2